<?php
//--- устанавливаем константы -------------------------------------------------
define('SID',session_id());

//--- Функция выхода ----------------------------------------------------------
//--- пользователь считается авторизированым, если в сессии присутствует UID --
function logout() {
	//::: записываем время выхода пользователя :::::::::::::::::::::::::::
	$tm_out = mysql_real_escape_string(time());
	$tm_in2 = mysql_real_escape_string($_SESSION['tm_in']);
    	mysql_query("UPDATE `ip` SET `ftime_out`='$tm_out'
    			WHERE `ftime_in`='$tm_in2' AND `fsid`='".SID."';")
	or die(mysql_error());
    	//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	session_unregister('findex'); 	//--- удаляем из сессии индекс пользователя
	session_unregister('fsession');	//--- и индекс сессии
    die(header('Location: '.$_SERVER['PHP_SELF']));
}
  //--- функция входа -----------------------------------------------------------
  //Все выбраные поля записываются в сессию.
  //Таким образом, при каждом просмотре страницы не надо выбирать их заново.
  //Для обновления информации из БД можно пользоваться этой же функцией - имя и пароль
  //хранятся в сессиях
function login($username, $password)
{
    //===
    $log = mysql_real_escape_string($username);
    $query = "SELECT `fsalt`
				FROM `users`
				WHERE `flogin`='{$log}'
				LIMIT 1";
    $sql = mysql_query($query) or die(mysql_error());
   	if (mysql_num_rows($sql) == 1)
	{
		$row = mysql_fetch_assoc($sql);
		// итак, вот она соль, соответствующая этому логину:
		$salt = $row['fsalt'];
		// теперь хешируем введенный пароль как надо и повторям шаги, которые были описаны выше:
		$password = md5(md5($password) . $salt);
    }
    //===
	$result = mysql_query("SELECT * FROM `users` WHERE `flogin`='$username' AND `fpass`='$password';")
          or die(mysql_error());
 	//--- Генерирует удобный массив из результата запроса
    $USER = mysql_fetch_array($result,1);
    //--- Если массив не пустой (это значит, что пара имя/пароль верная) ------
    if(!empty($USER))
    {
    	//--- Добавляем массив с пользователем к массиву сессии ---------------
    	$_SESSION = array_merge($_SESSION,$USER);

        mysql_query("UPDATE `users` SET `fsession`='".SID."' WHERE `findex`='".$USER['findex']."';")
              or die(mysql_error());
        return true;
    }
    else
    {
        return false;
    }
}

  //Функция проверки залогинности пользователя.
  //При входе, ID сессии записывается в БД.
  //Если ID текущей сессии и SID из БД не совпадают, производится logout.
  //Благородя этому нельзя одновременно работать под одним ником с разных браузеров.
function check_user($UID)
{
	$result = mysql_query("SELECT `fsession` FROM `users` WHERE `findex`='$UID';")
		or die(mysql_error());
    $sid = mysql_result($result,0);
    return $sid==SID ? true : false;
}

##Действия - если пользователь авторизирован
if(isset($_SESSION['findex']))
{ //--- Если была произведена авторизация, то в сессии есть uid

      //--- Константу удобно проверять в любом месте скрипта
      define('USER_LOGGED',true);
      //--- Создаём удобные переменные
      //--- Все поля таблицы пользователей записываются в сесси
      //--- Таким образом, после добавления нового поля в таблицу надо дописть лишь одну строку
      $UserLog = $_SESSION['flogin'];
      $UserPas = $_SESSION['fpass'];
      $UserInd = $_SESSION['findex'];
      $UserSts = $_SESSION['fstatus'];
}
else
{
      define('USER_LOGGED',false);
}

//=== действия при попытке входа ==============================================
if (isset($_POST['input']))
{
      if(get_magic_quotes_gpc())
      { //Если слеши автоматически добавляются
      	$_POST['login']    = stripslashes($_POST['login']);
        $_POST['password'] = stripslashes($_POST['password']);
      }
      $log = mysql_real_escape_string($_POST['login']);
      $pas = mysql_real_escape_string($_POST['password']);
      if(login($log, $pas))
      {
      	header('Refresh: 1');
      	//<meta http-equiv="refresh" content="10;url=index.php?id_top=17">
		//--- проблема с кодировкой. отключаю.
        //die('Вы успешно авторизировались!');
      }
      else
      {
		//не работает -> header('content="text/html; charset=UTF-8;"');
		header('Refresh: 3;');
        //die('Пароль неправильный!');
        //print $log.'<br />'; print $pas;
      }
}
//=============================================================================
  ##Действия при попытке выхода
if(isset($_GET['logout']))
{
      logout();
}
?>
